package com.bdqn.aop;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;

import java.util.Arrays;

/**
 * AroundLogger
 *
 * @author LILIBO
 * @since 2021-12-09
 */
public class AroundLogger {

    private Logger logger = Logger.getLogger(AroundLogger.class);

    /**
     * 环绕增强
     *
     * @param jp
     * @return
     */
    public Object around(ProceedingJoinPoint jp) {
        logger.debug("环绕增强 调用 " + jp.getTarget() + " 的 " + jp.getSignature().getName() + " 方法，入参为：" + Arrays.toString(jp.getArgs()));
        try {
            Object result = jp.proceed(); // 执行目标方法并获取返回值
            logger.debug("环绕增强 调用 " + jp.getTarget() + " 的 " + jp.getSignature().getName() + " 方法，方法的返回值：" + result);
            return result;
        } catch (Throwable e) {
            logger.error("环绕增强 调用 " + jp.getTarget() + " 的 " + jp.getSignature().getName() + " 方法，发生异常：" + e.getMessage());
        } finally {
            logger.debug("环绕增强 调用 " + jp.getTarget() + " 的 " + jp.getSignature().getName() + " 方法结束执行。");
        }
        return null;
    }

}
